package com.jt.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import com.jt.util.ObjectMapperUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import redis.clients.jedis.JedisCluster;

import java.util.UUID;

@Service(timeout = 3000)
public class DubboUserServiceImpl implements DubboUserService{

    @Autowired
    private UserMapper userMapper;
    @Autowired
    private JedisCluster jedisCluster;

    /**
     * 用户注册操作
     * 1.将密码进行加密
     *
     */
    @Override
    public void saveUser(User user) {
        byte[] bytes = user.getPassword().getBytes();
        //spring工具进行加密操作
        String md5Pass= DigestUtils.md5DigestAsHex(bytes);
        user.setPassword(md5Pass).setEmail(user.getPhone());
        userMapper.insert(user);
    }

    /**
     * 用户单点登录操作
     *
     *  1.获取用户名，密码进行校验,不存在返回null
     *  2.动态生成密钥，将用户信息转化为json
     *  3.将数据保存到redis中，7天有效
     *  4.返回密钥ticket信息
     */
    @Override
    public String findUserByUP(User user) {
        String md5Pass=DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
        user.setPassword(md5Pass);
        //根据对象中不为空的属性当做where条件
        QueryWrapper<User> wrapper = new QueryWrapper<>(user);
        User userDB = userMapper.selectOne(wrapper);
        //判断对象是否为空
        if(userDB==null){
            return null;
        }
        //用户名、密码正确，开启单点登录操作
        String ticket= UUID.randomUUID().toString().replace("-", "");
        //转化前将数据进行脱敏处理
        userDB.setPassword("123456");
        String userJSON= ObjectMapperUtil.toJSON(userDB);
        //将数据保存到redis中
        jedisCluster.setex(ticket, 7*24*60*60, userJSON);
        return ticket;
    }
}
